/**
 * 自动引入模板，在原有 sw-precache 插件默认模板基础上做的二次开发
 *
 * 因为是自定导入的模板，项目一旦生成，不支持随 sw-precache 的版本自动升级。
 * 可以到 Lavas 官网下载 basic 模板内获取最新模板进行替换
 *
 */

/* eslint-disable */

'use strict';

var precacheConfig = [["/dujie5416/2019/03/06/MySQL读写分离架构（MHA+Atlas）/index.html","8a07e210294a001d6f5abe400821461e"],["/dujie5416/2019/03/08/MySQL分布式架构-MyCAT/index.html","9acf650fd9915ce48a804cd9f10e264f"],["/dujie5416/2019/03/14/MySQL物理备份工具使用（Percona Xtrabackup）PBK   XBK/index.html","3cae86db978dca0ba9be162ca8c852da"],["/dujie5416/2019/03/19/MySQL 备份恢复（mysqldump）/index.html","15b3b46cc291bfea577724b39aad8d71"],["/dujie5416/2019/03/23/MySQL主从复制（Replication）/index.html","14f0786373a993551accc94b00098da3"],["/dujie5416/2019/03/24/MySQL MHA 高可用/index.html","08a10ff210f766e989791069f0d4590c"],["/dujie5416/2019/03/24/MySQL 优化/index.html","060dd7a10eb77aafaee475348566326e"],["/dujie5416/2019/03/26/MySQL 日志管理/index.html","42d50388860fe4f49b0364dd935c61a6"],["/dujie5416/2019/06/10/扩容根分区/index.html","8757b56af17395f848d288d81521d59f"],["/dujie5416/2019/09/23/SonarQube代码扫描/index.html","0d0c21a38006d5cd1ea02d6daf9369f9"],["/dujie5416/2019/10/10/centos7生成随机数/index.html","6c7921acf39cb881b21d9c08ddb54adc"],["/dujie5416/2020/02/14/promehteus+grafana/index.html","aca447d6d22b73327a6e5dce42dc10ec"],["/dujie5416/2020/05/02/pipeline分布式构建和pipline基础语法/index.html","f87b2998e0459d61d9eece7f88c0a6d2"],["/dujie5416/2020/05/13/iptables相关控制/index.html","80c0519af9198c06c6bb971a00d6b4c3"],["/dujie5416/2020/09/08/centos7搭建svn服务器/index.html","50ddbb6c300459993a719fb74be2488a"],["/dujie5416/2020/10/15/ab命令压测/index.html","c94c59be5913143443d5d153ebda92fe"],["/dujie5416/2021/03/06/服务器硬件压力测试/index.html","8577bd8200b394fb6abaaff7e450b286"],["/dujie5416/2021/08/24/rsync+inotify 实时备份/index.html","a2e35aff612197bee089b49849ea07ce"],["/dujie5416/2022/05/04/部署harbor服务器（https_http）/index.html","ea3d04d1424367cfb09ec49ec4cfde0a"],["/dujie5416/2022/05/23/记录服务器被挖矿的处理方法/index.html","6deb4d6c25e85576b3e4e5d1a637b8d4"],["/dujie5416/2022/06/20/kubeasz 二进制安装k8s高可用集群/index.html","c406d82d4e3d0de29e6b9e1bd477a1df"],["/dujie5416/2022/06/21/kubernetes安装coreDNS组件/index.html","fb043e8907fa3e23a63cbc19db1c7c48"],["/dujie5416/2022/06/23/kubernetes-ETCD/index.html","1514c52cc10c5d6cffed59802e7ab5f4"],["/dujie5416/2022/06/24/kubeasz -etcd v3 API版本数据备份与恢复/index.html","80d5a97c3f8c6f6e57c80613c8a25c6e"],["/dujie5416/2022/07/01/Deployment副本控制器/index.html","6a2ac5ab125368b85a0f48289ea0e298"],["/dujie5416/2022/07/01/RC RS副本控制器/index.html","4fa595b425e3762124e7ba1ef205cc30"],["/dujie5416/2022/07/02/Configmap/index.html","5caa2ee6f474dc7e019287468f37c905"],["/dujie5416/2022/07/02/PV PVC/index.html","18c026ce3b60e05f8a2d8b6d3715312e"],["/dujie5416/2022/07/03/Service控制器/index.html","8ead026ca2b42166c0bff55ea30305c7"],["/dujie5416/2022/07/03/Volume存储卷/index.html","debb3071d21886002e5fad5a172ae8da"],["/dujie5416/2022/07/03/secret/index.html","c2e8c0c93a90474ff8b76bbc36333d53"],["/dujie5416/2022/07/04/k8s-job cronjob/index.html","7d975ba0be2737a70d526bf276d41f06"],["/dujie5416/2022/07/05/kubernetes HPA使用及测试/index.html","97c47f65722790eb17c88cbfa8477141"],["/dujie5416/2022/08/02/使用阿里云oss静态页面部署服务/index.html","70d444cf13730412d6897cc7f5ed40de"],["/dujie5416/2022/08/04/基于centos7的Openssh版本升级/index.html","9df5daa0b7cb94c93edbbbe11813c9da"],["/dujie5416/2022/08/13/防止内存碎片化/index.html","e1a946dd370959d2694413ec7810ca17"],["/dujie5416/2022/08/15/Pod异常状态排错/index.html","351be95cf0ccea8f228749a70c1d98a1"],["/dujie5416/2022/08/16/Jenkins用户权限控制插件——Role-based Authorization Strategy/index.html","e16b0a4aeb49d3b504d8fcdcec4346ff"],["/dujie5416/2022/08/19/kubernetes磁盘爆满故障处理/index.html","ab512f3485b9049a0601ca4cc07c981c"],["/dujie5416/2022/08/23/分析 ExitCode 定位 Pod 异常退出原因 /index.html","e300c3597dea27951210c29e75479996"],["/dujie5416/2022/08/23/容器进程主动退出原因/index.html","d911a62116b704cbd0a8a536747c3711"],["/dujie5416/2023/01/13/【mysql数据损坏，通过ibd和frm文件批量恢复数据库数据】 (1)/index.html","1d7c8ec7ec94029a421bf4af1deb9a01"],["/dujie5416/2023/02/12/Golang分支、循环、随机数/index.html","dcfa35eba418f9324b52cb4ab3e1029b"],["/dujie5416/2023/02/12/Golang线性表-数组、切片/index.html","c2b2a978130925c340cffcbf27bc2e4c"],["/dujie5416/2023/02/13/Golang字符串string/index.html","de998af135a63e9b347762232da961f0"],["/dujie5416/2023/02/23/Django视图类View源码分析/index.html","0b4f52a459f05d3443d6e0c95eeb58e2"],["/dujie5416/2023/04/14/Golang哈希表/index.html","9c09a516a4a96c617ed3e3d99defea0b"],["/dujie5416/2023/04/14/Go函数/index.html","fb62a22f15d72753d10c57be8cdcb7ca"],["/dujie5416/2023/04/15/Golang List/index.html","3911c168dee9885e303f4d0bd8f62a3b"],["/dujie5416/2023/04/16/Golang递归、匿名函数、作用域、闭包/index.html","28672a9cf72969dc6cfcf8501b36174e"],["/dujie5416/2023/04/17/Golang变量逃逸——堆、栈/index.html","509a6afa8bafbefe7095300c0b6bb116"],["/dujie5416/2023/04/17/Golang结构体/index.html","ae2cfd734afdee219e1a2ff632f4de8a"],["/dujie5416/2023/04/18/Golang接口/index.html","e9a32801e85e65772a39f8404e08e951"],["/dujie5416/2023/04/19/Golang错误处理/index.html","bf36e8ecd3691ead97afab6de49bfb1e"],["/dujie5416/2023/04/20/Go中的面向对象/index.html","e58496235d8b5f1507c966ba5f6165e9"],["/dujie5416/2023/04/21/Golang序列化和反序列化/index.html","c74a0c774f6715be3d5f1e33ede85f94"],["/dujie5416/2023/04/22/Golang时间/index.html","7793bbf1b29ffdddf7cb8094b0ba1372"],["/dujie5416/2023/04/25/golang包管理/index.html","cef912dc0ffdd7d7b8241c4ee4a54e3d"],["/dujie5416/2023/05/01/Golang日志管理/index.html","7f43d90b1a983ee4e53bfa5e6c734db7"],["/dujie5416/2023/05/03/Golang数据库标准开发/index.html","bc1baf4e511cf48771c1ba6f3e1743dd"],["/dujie5416/2023/05/06/Golang中的GORM/index.html","a3d99e1939ec314a54b5721deb0b7725"],["/dujie5416/2023/05/09/Go操作MongoDB/index.html","eb5ffe5faceee78ca4a39d3862b1f392"],["/dujie5416/2023/05/10/进程线程/index.html","b19b0009b83fd63f8ec4538fdd728e7d"],["/dujie5416/2023/05/12/TCP编程/index.html","219aa271812d4eb4dcf50e282d127b66"],["/dujie5416/2023/05/15/Golang协程/index.html","0a90609c1d4da7279dd646e7b42b49f7"],["/dujie5416/2023/05/20/Channel通道/index.html","61b7192c7c81156cab3aff1f214b9ba9"],["/dujie5416/2023/05/26/Go文件处理/index.html","c2716615c4743a979af69fee47c28eb9"],["/dujie5416/2023/06/01/Sync包实现并发/index.html","a920bbfd2052371a8d19f0b439f3ef36"],["/dujie5416/2023/06/04/ServeMux、httprouter/index.html","e86ae81396d546d0b78b3296f3bff436"],["/dujie5416/2023/06/23/Gin框架/index.html","7d764610569fce0fe962120f0acfc476"],["/dujie5416/2023/06/27/基于IOC解决对象依赖问题/index.html","ab25381faadbacd24754aad1853bc5f8"],["/dujie5416/2023/07/13/Vue状态管理/index.html","956ec55d88b56947265814b490ec3729"],["/dujie5416/2023/07/29/根据router显示左侧菜单栏隐藏某个菜单选项/index.html","ff11d7b96fae573efbc05f06658e33a9"],["/dujie5416/404.html","1420ec39f285560a3e6ae46a19e00589"],["/dujie5416/archives/2019/03/index.html","3f04d6e3ab6be6c5d25f182076853a6e"],["/dujie5416/archives/2019/06/index.html","aac84633c2f831cf78f2a786f52eb345"],["/dujie5416/archives/2019/09/index.html","7ed3a9e655c91e6d2548ab2363307d85"],["/dujie5416/archives/2019/10/index.html","23fee60a18f9140d265847bce5e0f23d"],["/dujie5416/archives/2019/index.html","a4c6f8226445ec2cd2482440970f917d"],["/dujie5416/archives/2019/page/2/index.html","23ef80ab7403a9b2d1f8456c35679319"],["/dujie5416/archives/2020/02/index.html","29ca3cd6d80020b5ebac4803f605f923"],["/dujie5416/archives/2020/05/index.html","690876a2c6c6793747bfd71601a5d1bd"],["/dujie5416/archives/2020/09/index.html","53546db5fa7612802cf27a8e47da183d"],["/dujie5416/archives/2020/10/index.html","4f4941b51a9d25b11669acce8d4d6763"],["/dujie5416/archives/2020/index.html","cb374b9a3a1358cb2508f77b139fd36f"],["/dujie5416/archives/2021/03/index.html","1ee82b7990425b4a2e559711d1c37866"],["/dujie5416/archives/2021/08/index.html","f02b7c3b97ca7d742ca3e07516aa2bac"],["/dujie5416/archives/2021/index.html","4d8112dabad8fc375c193b127fce9d1f"],["/dujie5416/archives/2022/05/index.html","3d176202410842587d5d476f9f5effa2"],["/dujie5416/archives/2022/06/index.html","8d1c1932ab7ae0f0fecc0970ff8dd1e2"],["/dujie5416/archives/2022/07/index.html","96218d34e1a031014163fdf59a86e765"],["/dujie5416/archives/2022/08/index.html","23ca882a40dd93cdeeb0cd898b3f952c"],["/dujie5416/archives/2022/index.html","4cebac61f19a63f6eee867908e44fec1"],["/dujie5416/archives/2022/page/2/index.html","6af6ed75c983a6290d47e802a02b09e9"],["/dujie5416/archives/2022/page/3/index.html","fa145c19ee9a87f1d599afdd2a2918b4"],["/dujie5416/archives/2023/01/index.html","16776cd306eb3c811dbe56ae7fe944f3"],["/dujie5416/archives/2023/02/index.html","6e17fbecc50448038ffba9bfbac042c6"],["/dujie5416/archives/2023/04/index.html","6865dda75d8abe6a96ef2aea6e97ec5b"],["/dujie5416/archives/2023/04/page/2/index.html","648420625fea5c2c66595200e4f0b1da"],["/dujie5416/archives/2023/05/index.html","4c6e0e5decb1b8e4edd9d93ad0058918"],["/dujie5416/archives/2023/06/index.html","60c5dac215277a1787072b3ba9569a01"],["/dujie5416/archives/2023/07/index.html","ae8f890fe0e81584f21acdaea3c12227"],["/dujie5416/archives/2023/index.html","bdeb4a615a6c4e17904a314e32a5af64"],["/dujie5416/archives/2023/page/2/index.html","dc952c2a556fdc6cc60fe56f9c8e68f5"],["/dujie5416/archives/2023/page/3/index.html","073d4c5055277f55440cf995a34c1224"],["/dujie5416/archives/2023/page/4/index.html","bfdbf56c3596acb3a2ab4567fd8d76d8"],["/dujie5416/archives/index.html","a3168fc633006d0082fa0a6db226183b"],["/dujie5416/archives/page/2/index.html","47fb503bf262580ef8dcd4563d33ce7f"],["/dujie5416/archives/page/3/index.html","ba917708129e4125892b159624dd399b"],["/dujie5416/archives/page/4/index.html","0c178715d3b582d7559ac3733b07b353"],["/dujie5416/archives/page/5/index.html","093baa3f2f5ba88a71203b4b3b5332cc"],["/dujie5416/archives/page/6/index.html","3decc1fa0b57ccab8591c371c476eada"],["/dujie5416/archives/page/7/index.html","6a9740b8bbc06ed383edbaa8a27c405d"],["/dujie5416/archives/page/8/index.html","89cf7fc0da5fb375c1844a98f1b09de6"],["/dujie5416/bangumis/index.html","9df1609a4e75e7f0f4465e7939410ae4"],["/dujie5416/categories/Django/index.html","3613a8f1ddb68cb2c02831ca0489a30f"],["/dujie5416/categories/Docker/index.html","47e53902b7f3372048af7cfafaeaf20d"],["/dujie5416/categories/SonarQube/index.html","98c08f6b52b2e1703b82676a2c776a01"],["/dujie5416/categories/golang/index.html","9eef1bca433cc03fd78c914f9ebbf157"],["/dujie5416/categories/golang/page/2/index.html","e4d890d31b7ea2f0be745a4275ae4beb"],["/dujie5416/categories/golang/page/3/index.html","5b25ec6cd5de5a1d19a3f9287e5d6aef"],["/dujie5416/categories/index.html","623b53a5e4e42c40f196342e41fb9434"],["/dujie5416/categories/iptables/index.html","1edb35e2383562cdfdf685464a99a995"],["/dujie5416/categories/jenkins/index.html","22e729b9ef9385fbad5e8415ce9283f3"],["/dujie5416/categories/kubernetes/index.html","59ff4947dc7eec6f6379c9ec4fda0e55"],["/dujie5416/categories/kubernetes/page/2/index.html","6744d6be788636120fd56ab01b2215ab"],["/dujie5416/categories/linux/index.html","73165c444c0f94bb39ad4fa67e8bea84"],["/dujie5416/categories/mysql/index.html","c9629e55e52426857a260c20f08d6b0b"],["/dujie5416/categories/prometheus/index.html","161355a89ca4a0460a4b78e82bfae851"],["/dujie5416/categories/svn/index.html","f6a6fd2eeab36658efc16c3ca3d886df"],["/dujie5416/css/background.css","2942635f3e138bf3f0652299cf376c84"],["/dujie5416/css/custom.css","d8f1986b73cb77a533b567a4cb45437b"],["/dujie5416/css/index.css","d260c62dab02c343c586afb634d6004a"],["/dujie5416/css/lantern.css","c8483fed1ae9927bc6fad5817ee8d7bd"],["/dujie5416/css/rightMenu.css","036623ed00b65cd7a5b31dffe2a25c4e"],["/dujie5416/css/universe.css","52c685572ce95860fe8ddf20fb03df83"],["/dujie5416/css/var.css","d41d8cd98f00b204e9800998ecf8427e"],["/dujie5416/gallery/index.html","7b389c26d0453cc9baa7b7ca0545195f"],["/dujie5416/gallery/mm/index.html","de060542b7f0eab286ec351942342bcf"],["/dujie5416/gallery/rc/index.html","717b806afc821b4f6a566d0646b5a23e"],["/dujie5416/gallery/古北水镇/index.html","c2bd1914abb3bd81f0ffb7a1a8c8f09a"],["/dujie5416/images/pasted-0.png","fa0270d7982df45acf8bec41f258fad5"],["/dujie5416/images/pasted-1.png","fa0270d7982df45acf8bec41f258fad5"],["/dujie5416/images/pasted-10.png","5d0d6d8aac46e34b30092f808950a9d3"],["/dujie5416/images/pasted-11.png","0784299af846da4168cad054741957f6"],["/dujie5416/images/pasted-12.png","e258ff6c3291821a2b9bbc6a25574624"],["/dujie5416/images/pasted-13.png","000a03ee30cefc56d0749078cf04a949"],["/dujie5416/images/pasted-14.png","8e547d601142697e448fbb4019bbb06a"],["/dujie5416/images/pasted-15.png","950cc9a62554680e2f0570b97e564259"],["/dujie5416/images/pasted-16.png","1707596a28a9b697891bc718c96175ee"],["/dujie5416/images/pasted-17.png","887da59e5df5c2af9d32fea3ffd5e3f7"],["/dujie5416/images/pasted-18.png","5f724508b49e8e7ba1305062ef8e150a"],["/dujie5416/images/pasted-19.png","a47092a023a70b2427014e75873bd6cd"],["/dujie5416/images/pasted-2.png","0a20960a3ee7446d34a8c4cc687b7adf"],["/dujie5416/images/pasted-3.png","7fc1a4e3fe8ab621dc0aa0ad4309f266"],["/dujie5416/images/pasted-4.png","d15fb5188609b444b3f6710ecf9b139c"],["/dujie5416/images/pasted-5.png","ad234216c2159391c25636525c314e41"],["/dujie5416/images/pasted-6.png","9600a48f0f98bce154df36c0a4dbbdc5"],["/dujie5416/images/pasted-7.png","b42122e7904f38ca3e9a32908f872f36"],["/dujie5416/images/pasted-8.png","f5b4699a2bd89e9027d889247b9a1283"],["/dujie5416/images/pasted-9.png","1537c8048729105cddb53dfa80ef72d6"],["/dujie5416/img/12.png","62ac1ef86217d9ac116fa3d22d78dd9b"],["/dujie5416/img/404.jpg","4ef3cfb882b6dd4128da4c8745e9a507"],["/dujie5416/img/alipay.jpg","e26ff9d7f5db82408a3b9d320a46ed48"],["/dujie5416/img/centos.png","8c9381c65647670beea0443be09905d8"],["/dujie5416/img/desktop.jpg","13c1182799ca5447fd6493c209ae3512"],["/dujie5416/img/dongman.jpg","27894a3d2f116821649423e50a41d0a7"],["/dujie5416/img/favicon.png","7a8c47cb5a2149c1a1af21e90ecd9ca7"],["/dujie5416/img/friend_404.gif","68af0be9d22722e74665ef44dd532ba8"],["/dujie5416/img/harbor.png","4b104adfa004775ce392037ccc140b62"],["/dujie5416/img/harbor2.png","7545fc3e108b3d60cf61ee2010d6e841"],["/dujie5416/img/inotify.png","9ccfc735d97078fba061989fdd50fed1"],["/dujie5416/img/iptables.png","20f88af231b35ba15839a4cc779e2222"],["/dujie5416/img/jenkins.png","5401eb529f0b795e0e549182e516072f"],["/dujie5416/img/jenkins1.png","dc3b8e8cb59e5864c4f7fe2dc13eab9f"],["/dujie5416/img/kubernetes.png","3428de86fd4ecb4eca7e4f3d539c59e2"],["/dujie5416/img/mysql.jpg","331b83381bdb0c15668bfdcd266b1034"],["/dujie5416/img/prometheus.png","7ab7b7c19a98e723a5f2646669a01311"],["/dujie5416/img/sonarqube.png","5216669e0fbcc6c387dbf29a5321bfe0"],["/dujie5416/img/svn.png","895bfaeb2797f9635f660b5ee00946eb"],["/dujie5416/img/touxiang.png","b17d8c86cf0c70c30e7d7327dd5c7e4c"],["/dujie5416/img/wechat.jpg","2516cfa5ceda8f42ac6ba9efec9d88b3"],["/dujie5416/index.html","1300ed65026b21b3b00517e8eebfdcfd"],["/dujie5416/js/chocolate.js","4826caaa586e99d8fee8c5afbb3e70c0"],["/dujie5416/js/custom.js","529d0eeff76b63203edf3305bfc831bc"],["/dujie5416/js/main.js","73e1a92da3a39646678bffb9e7817148"],["/dujie5416/js/rightMenu.js","68db67f6c6ee6b8db0eb0ddd7e85d2ef"],["/dujie5416/js/search/algolia.js","308de383b932f321e04751fd1f79cffb"],["/dujie5416/js/search/local-search.js","149fcc60c1de0a818e111978d01cbd87"],["/dujie5416/js/tw_cn.js","b3810513e04b13b2d18c6b779c883f85"],["/dujie5416/js/universe.js","fafdd847299ee73d084aa36ced9bce97"],["/dujie5416/js/utils.js","24971090b8b1bd5d3f538d414e270fd3"],["/dujie5416/live2dw/assets/moc/tororo.2048/texture_00.png","9bd791736cfc91b62670dee5f7fbd45c"],["/dujie5416/live2dw/lib/L2Dwidget.0.min.js","32973883fcac0a9ae6cc79c0ea25fda2"],["/dujie5416/live2dw/lib/L2Dwidget.min.js","094cbace49a39548bed64abff5988b05"],["/dujie5416/music/index.html","8457d546407a2929b5a8e427a1ee3226"],["/dujie5416/page/2/index.html","1e0b30f98fca05924c9e4d64ddf3e48f"],["/dujie5416/page/3/index.html","4b8e685a56f6e9649a2cc152d906beb6"],["/dujie5416/page/4/index.html","c3bc053d3f3c79bf229dbf05f952912a"],["/dujie5416/page/5/index.html","5f82d794453a82fe66ee3853e20b8206"],["/dujie5416/page/6/index.html","3e8488226077306c2d9496999bf30467"],["/dujie5416/page/7/index.html","f7e19f48e88a94ccbf5761bbfb725d35"],["/dujie5416/page/8/index.html","4c9e1661ba4958977f595966953ab769"],["/dujie5416/sw-register.js","b9b26f66fc3f4a8aa77370d53c50e2b8"],["/dujie5416/tags/Django/index.html","534014b175596f9a41a74b752c89f7c3"],["/dujie5416/tags/Python/index.html","1b224ec5ac6ad730f13c7b7bce2fc25d"],["/dujie5416/tags/SonarQube/index.html","592b40566ea596f8a3a1180e6e2d11e4"],["/dujie5416/tags/centos/index.html","44daea87f6b067d1414f10afadd723af"],["/dujie5416/tags/docker/index.html","b96a28b747787e900336abaab2e1f6f3"],["/dujie5416/tags/golang/index.html","a9379ce2e5e0af11a62a48862f2d9047"],["/dujie5416/tags/golang/page/2/index.html","006248ad8566b3671a2d2a37ad8cf217"],["/dujie5416/tags/golang/page/3/index.html","275ec8fbb52047b9179c07571705f433"],["/dujie5416/tags/grafana/index.html","6f643f5f1a70694365cdfa4033576f5d"],["/dujie5416/tags/index.html","df14d4bde6014693616d4f191eb0c305"],["/dujie5416/tags/iptables/index.html","1669d9eac67c0465f508c2b2713324b5"],["/dujie5416/tags/jenkins/index.html","7d18c2edc6ae888a9b234b3da4220aa0"],["/dujie5416/tags/kubernetes/index.html","4f7f9edba1e302458d18d186edfd19a4"],["/dujie5416/tags/kubernetes/page/2/index.html","7d5a3fe162afc74a3d322ae1919b71b6"],["/dujie5416/tags/linux/index.html","889ae627fc369c29ba17efc7c42b51e1"],["/dujie5416/tags/mysql/index.html","58064b70e77f0c8e04a49a5f794d2cb7"],["/dujie5416/tags/prometheus/index.html","74b1e9e3fef3c3af8ad2611719300785"],["/dujie5416/tags/svn/index.html","de6078804478da55b1967cfa6cc68b78"],["/dujie5416/tags/云原生/index.html","2359863e694aec472ef50ee986a109d5"],["/dujie5416/tags/云原生/page/2/index.html","87b54144060d389b982e95b58c763677"],["/dujie5416/tags/云原生/page/3/index.html","22122b1c142099f890c5007997dc6a88"],["/dujie5416/tags/云原生/page/4/index.html","b6e0a72984d1346cf1603f8eed445d0d"],["/dujie5416/tags/云原生/page/5/index.html","e1d2bbce882a95f8cfc6d95dea77e212"],["/dujie5416/tags/阿里云/index.html","fa3f94deeaad7daced363eaa41762d04"]];
var cacheName = 'sw-precache-v3--' + (self.registration ? self.registration.scope : '');
var firstRegister = 1; // 默认1是首次安装SW， 0是SW更新


var ignoreUrlParametersMatching = [/^utm_/];


var addDirectoryIndex = function (originalUrl, index) {
    var url = new URL(originalUrl);
    if (url.pathname.slice(-1) === '/') {
        url.pathname += index;
    }
    return url.toString();
};

var cleanResponse = function (originalResponse) {
    // 如果没有重定向响应，不需干啥
    if (!originalResponse.redirected) {
        return Promise.resolve(originalResponse);
    }

    // Firefox 50 及以下不知处 Response.body 流, 所以我们需要读取整个body以blob形式返回。
    var bodyPromise = 'body' in originalResponse ?
        Promise.resolve(originalResponse.body) :
        originalResponse.blob();

    return bodyPromise.then(function (body) {
        // new Response() 可同时支持 stream or Blob.
        return new Response(body, {
            headers: originalResponse.headers,
            status: originalResponse.status,
            statusText: originalResponse.statusText
        });
    });
};

var createCacheKey = function (originalUrl, paramName, paramValue,
    dontCacheBustUrlsMatching) {

    // 创建一个新的URL对象，避免影响原始URL
    var url = new URL(originalUrl);

    // 如果 dontCacheBustUrlsMatching 值没有设置，或是没有匹配到，将值拼接到url.serach后
    if (!dontCacheBustUrlsMatching ||
        !(url.pathname.match(dontCacheBustUrlsMatching))) {
        url.search += (url.search ? '&' : '') +
            encodeURIComponent(paramName) + '=' + encodeURIComponent(paramValue);
    }

    return url.toString();
};

var isPathWhitelisted = function (whitelist, absoluteUrlString) {
    // 如果 whitelist 是空数组，则认为全部都在白名单内
    if (whitelist.length === 0) {
        return true;
    }

    // 否则逐个匹配正则匹配并返回
    var path = (new URL(absoluteUrlString)).pathname;
    return whitelist.some(function (whitelistedPathRegex) {
        return path.match(whitelistedPathRegex);
    });
};

var stripIgnoredUrlParameters = function (originalUrl,
    ignoreUrlParametersMatching) {
    var url = new URL(originalUrl);
    // 移除 hash; 查看 https://github.com/GoogleChrome/sw-precache/issues/290
    url.hash = '';

    url.search = url.search.slice(1) // 是否包含 '?'
        .split('&') // 分割成数组 'key=value' 的形式
        .map(function (kv) {
            return kv.split('='); // 分割每个 'key=value' 字符串成 [key, value] 形式
        })
        .filter(function (kv) {
            return ignoreUrlParametersMatching.every(function (ignoredRegex) {
                return !ignoredRegex.test(kv[0]); // 如果 key 没有匹配到任何忽略参数正则，就 Return true
            });
        })
        .map(function (kv) {
            return kv.join('='); // 重新把 [key, value] 格式转换为 'key=value' 字符串
        })
        .join('&'); // 将所有参数 'key=value' 以 '&' 拼接

    return url.toString();
};


var addDirectoryIndex = function (originalUrl, index) {
    var url = new URL(originalUrl);
    if (url.pathname.slice(-1) === '/') {
        url.pathname += index;
    }
    return url.toString();
};

var hashParamName = '_sw-precache';
var urlsToCacheKeys = new Map(
    precacheConfig.map(function (item) {
        var relativeUrl = item[0];
        var hash = item[1];
        var absoluteUrl = new URL(relativeUrl, self.location);
        var cacheKey = createCacheKey(absoluteUrl, hashParamName, hash, false);
        return [absoluteUrl.toString(), cacheKey];
    })
);

function setOfCachedUrls(cache) {
    return cache.keys().then(function (requests) {
        // 如果原cacheName中没有缓存任何收，就默认是首次安装，否则认为是SW更新
        if (requests && requests.length > 0) {
            firstRegister = 0; // SW更新
        }
        return requests.map(function (request) {
            return request.url;
        });
    }).then(function (urls) {
        return new Set(urls);
    });
}

self.addEventListener('install', function (event) {
    event.waitUntil(
        caches.open(cacheName).then(function (cache) {
            return setOfCachedUrls(cache).then(function (cachedUrls) {
                return Promise.all(
                    Array.from(urlsToCacheKeys.values()).map(function (cacheKey) {
                        // 如果缓存中没有匹配到cacheKey，添加进去
                        if (!cachedUrls.has(cacheKey)) {
                            var request = new Request(cacheKey, { credentials: 'same-origin' });
                            return fetch(request).then(function (response) {
                                // 只要返回200才能继续，否则直接抛错
                                if (!response.ok) {
                                    throw new Error('Request for ' + cacheKey + ' returned a ' +
                                        'response with status ' + response.status);
                                }

                                return cleanResponse(response).then(function (responseToCache) {
                                    return cache.put(cacheKey, responseToCache);
                                });
                            });
                        }
                    })
                );
            });
        })
            .then(function () {
            
            // 强制 SW 状态 installing -> activate
            return self.skipWaiting();
            
        })
    );
});

self.addEventListener('activate', function (event) {
    var setOfExpectedUrls = new Set(urlsToCacheKeys.values());

    event.waitUntil(
        caches.open(cacheName).then(function (cache) {
            return cache.keys().then(function (existingRequests) {
                return Promise.all(
                    existingRequests.map(function (existingRequest) {
                        // 删除原缓存中相同键值内容
                        if (!setOfExpectedUrls.has(existingRequest.url)) {
                            return cache.delete(existingRequest);
                        }
                    })
                );
            });
        }).then(function () {
            
            return self.clients.claim();
            
        }).then(function () {
                // 如果是首次安装 SW 时, 不发送更新消息（是否是首次安装，通过指定cacheName 中是否有缓存信息判断）
                // 如果不是首次安装，则是内容有更新，需要通知页面重载更新
                if (!firstRegister) {
                    return self.clients.matchAll()
                        .then(function (clients) {
                            if (clients && clients.length) {
                                clients.forEach(function (client) {
                                    client.postMessage('sw.update');
                                })
                            }
                        })
                }
            })
    );
});



    self.addEventListener('fetch', function (event) {
        if (event.request.method === 'GET') {

            // 是否应该 event.respondWith()，需要我们逐步的判断
            // 而且也方便了后期做特殊的特殊
            var shouldRespond;


            // 首先去除已配置的忽略参数及hash
            // 查看缓存简直中是否包含该请求，包含就将shouldRespond 设为true
            var url = stripIgnoredUrlParameters(event.request.url, ignoreUrlParametersMatching);
            shouldRespond = urlsToCacheKeys.has(url);

            // 如果 shouldRespond 是 false, 我们在url后默认增加 'index.html'
            // (或者是你在配置文件中自行配置的 directoryIndex 参数值)，继续查找缓存列表
            var directoryIndex = 'index.html';
            if (!shouldRespond && directoryIndex) {
                url = addDirectoryIndex(url, directoryIndex);
                shouldRespond = urlsToCacheKeys.has(url);
            }

            // 如果 shouldRespond 仍是 false，检查是否是navigation
            // request， 如果是的话，判断是否能与 navigateFallbackWhitelist 正则列表匹配
            var navigateFallback = '';
            if (!shouldRespond &&
                navigateFallback &&
                (event.request.mode === 'navigate') &&
                isPathWhitelisted([], event.request.url)
            ) {
                url = new URL(navigateFallback, self.location).toString();
                shouldRespond = urlsToCacheKeys.has(url);
            }

            // 如果 shouldRespond 被置为 true
            // 则 event.respondWith()匹配缓存返回结果，匹配不成就直接请求.
            if (shouldRespond) {
                event.respondWith(
                    caches.open(cacheName).then(function (cache) {
                        return cache.match(urlsToCacheKeys.get(url)).then(function (response) {
                            if (response) {
                                return response;
                            }
                            throw Error('The cached response that was expected is missing.');
                        });
                    }).catch(function (e) {
                        // 如果捕获到异常错误，直接返回 fetch() 请求资源
                        console.warn('Couldn\'t serve response for "%s" from cache: %O', event.request.url, e);
                        return fetch(event.request);
                    })
                );
            }
        }
    });









/* eslint-enable */
